<template>
    <div class='tinymce-container editor-container'>
        <textarea class='tinymce-textarea' :id="id"></textarea>
    </div>
</template>

<script>

  export default {
        name: 'tinymce',
        data() {
          return {
              hasChange: false,
              hasInit: false
          }
        },
        props: {
          id: {
              type: String,
              default: 'tinymceEditor'
          },
          value: {
              type: String,
              default: ''
          },
          plugins: {
              type: Array,
              required: false,
              default() {
                return [
                     'advlist autolink lists link image charmap print preview anchor textcolor',
                     'searchreplace visualblocks code fullscreen',
                     'insertdatetime media table contextmenu paste code help'
                ]
              }
          },
          toolbar: {
              type: String,
              required: false,
              default() {
                return 'insert | undo redo |  styleselect | bold italic backcolor  | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | removeformat | link image media codesample | help'
              }
          }
         
        },
        watch: {
          value(val) {
            if (!this.hasChange && this.hasInit) {
               this.$nextTick(() => tinymce.get(this.id).setContent(val))
            }
          }
        },
        mounted() {
          const _this = this;
          tinymce.init({
            selector: `#${this.id}`,
            height: 500,
            theme: 'modern',
            menubar: true, // 是否显示各个类目菜单
            body_class: 'panel-body ',
            object_resizing: false, // ?
          //  language: 'zh_CN',
          //  language_url: '/static/tinymce/langs/zh_CN.js',

            plugins: this.plugins,
            toolbar: this.toolbar,
          
            end_container_on_empty_block: true,
            powerpaste_word_import: 'clean',
            code_dialog_height: 450,
            code_dialog_width: 1000,
            advlist_bullet_styles: 'square',
            advlist_number_styles: 'default',
            block_formats: '普通标签=p;小标题=h2;',
            imagetools_cors_hosts: ['wpimg.wallstcn.com', 'wallstreetcn.com'],
            imagetools_toolbar: 'watermark',
            default_link_target: '_blank',
            link_title: false,
            init_instance_callback: editor => {
              if (_this.value) {
                editor.setContent(_this.value)
              }
              _this.hasInit = true;
              editor.on('NodeChange Change KeyUp', () => {
                this.hasChange = true;
                this.$emit('input', editor.getContent({ format: 'raw' }));
              });
            },
          // 整合七牛上传
          // images_dataimg_filter(img) {
          //   setTimeout(() => {
          //     const $image = $(img);
          //     $image.removeAttr('width');
          //     $image.removeAttr('height');
          //     if ($image[0].height && $image[0].width) {
          //       $image.attr('data-wscntype', 'image');
          //       $image.attr('data-wscnh', $image[0].height);
          //       $image.attr('data-wscnw', $image[0].width);
          //       $image.addClass('wscnph');
          //     }
          //   }, 0);
          //   return img
          // },
          // images_upload_handler(blobInfo, success, failure, progress) {
          //   progress(0);
          //   const token = _this.$store.getters.token;
          //   getToken(token).then(response => {
          //     const url = response.data.qiniu_url;
          //     const formData = new FormData();
          //     formData.append('token', response.data.qiniu_token);
          //     formData.append('key', response.data.qiniu_key);
          //     formData.append('file', blobInfo.blob(), url);
          //     upload(formData).then(() => {
          //       success(url);
          //       progress(100);
          //     })
          //   }).catch(err => {
          //     failure('出现未知问题，刷新页面，或者联系程序员')
          //     console.log(err);
          //   });
          // },
            setup(editor) {
              editor.addButton('h2', {
                title: '小标题', // tooltip text seen on mouseover
                text: '小标题',
                onclick() {
                  editor.execCommand('mceToggleFormat', false, 'h2');
                },
                onPostRender() {
                  const btn = this;
                  editor.on('init', () => {
                    editor.formatter.formatChanged('h2', state => {
                      btn.active(state);
                    });
                  });
                }
              });
              editor.addButton('p', {
                title: '正文',
                text: '正文',
                onclick() {
                  editor.execCommand('mceToggleFormat', false, 'p');
                },
                onPostRender() {
                  const btn = this;
                  editor.on('init', () => {
                    editor.formatter.formatChanged('p', state => {
                      btn.active(state);
                    });
                  });
                }
              });
            }
          });
        },
        destroyed() {
          tinymce.get(this.id).destroy();
        }
  }
</script>

<style scoped>
  .tinymce-container {
    position: relative
  }

  .tinymce-textarea {
    visibility: hidden;
    z-index: -1;
  }

  .editor-custom-btn-container {
    position: absolute;
    right: 15px;
    top: 18px;
  }

  .editor-upload-btn {
    display: inline-block;
  }
</style>
